; NASM macro set to make interfacing to 32-bit programs easier -*- nasm -*-

%imacro proc 1			; begin a procedure definition
%push proc
          global %1
%1:       push ebp
          mov ebp,esp
%assign %$arg 8
%define %$procname %1
%endmacro

; VS: this version doesn't work for some reason...
;%imacro arg 0-1 4		; used with the argument name as a label
;	  equ %$arg
;%assign %$arg %1+%$arg
;%endmacro

; usage: arg name[,size]   size defaults to 4
%imacro arg 1-2 4
	  %1 equ %$arg
%assign %$arg %2+%$arg
%endmacro


%imacro endproc 0
%ifnctx proc
%error Mismatched `endproc'/`proc'
%else
	  leave
	  ret
__end_%$procname:		; useful for calculating function size
%pop
%endif
%endmacro
